package com.lottery.material.service.admin.conf;

import com.lottery.material.pojo.conf.MenuLevelConfig;
import com.lottery.material.pojo.page.Page;
import com.lottery.material.pojocustom.conf.MenuLevelConfigCustom;

import java.util.List;

/**
 * Description：类别配置服务接口
 * Created by 朱正磊 on 2019-04-13 17:04
 */
public interface MenuLevelConfigService {

    /**
     * description：新增一条数据（一级类别）
     * user 朱正磊
     * time 2019-04-17 17:06
     * @param menuLevelConfig 对象
     * @return 返回持久化操作数据库状态值
     */
    Integer addOne(MenuLevelConfig menuLevelConfig);

    /**
     * description：新增一条数据（二级类别）
     * user 朱正磊
     * time 2019-04-17 17:06
     * @param menuLevelConfig 对象
     * @return 返回持久化操作数据库状态值
     */
    Integer addTwo(MenuLevelConfig menuLevelConfig);

    /**
     * description：根据主键物理删除
     * user 朱正磊
     * time 2019-04-20 15:13
     * @param id 主键
     * @return 返回持久化操作数据库状态值
     */
    Integer deleteById(Integer id);

    /**
     * description：根据主键查询唯一数据
     * user 朱正磊
     * time 2019-04-19 20:11
     * @param id 主键
     * @return 返回唯一数据
     */
    MenuLevelConfig findById(Integer id);

    /**
     * description：根据主键修改一条数据
     * user 朱正磊
     * time 2019-04-17 17:09
     * @param menuLevelConfig 对象
     * @return 返回持久化操作数据库状态值
     */
    Integer updateById(MenuLevelConfig menuLevelConfig);

    /**
     * description：查询扩展类分页列表（一级类别）
     * user 朱正磊
     * time 2019-04-17 17:01
     * @param page 分页对象
     * @return 返回扩展类分页列表数据
     */
    List<MenuLevelConfigCustom> findOneCustomListPage(Page page);

    /**
     * description：查询扩展类分页列表（二级类别）
     * user 朱正磊
     * time 2019-04-17 17:01
     * @param page 分页对象
     * @return 返回扩展类分页列表数据
     */
    List<MenuLevelConfigCustom> findTwoCustomListPage(Page page);

    /**
     * description：根据主键查询唯一扩展类数据
     * user 朱正磊
     * time 2019-04-17 17:03
     * @param id 主键
     * @return 返回唯一扩展类数据
     */
    MenuLevelConfigCustom findCustomById(Integer id);

    /**
     * description：根据所属类别查询类别配置列表
     * user 朱正磊
     * time 2019-05-21 16:59
     * @param levelType 当前所属类别
     * @return 返回类别配置列表
     */
    List<MenuLevelConfig> findByLevelType(Integer levelType);

    /**
     * description：生成类别编号
     * user 朱正磊
     * time 2019-04-19 17:33
     * @param levelType 当前所属级别（1：一级类别；2：二级类别）
     * @return 返回类别编号
     */
    String genMenuCode(Integer levelType);

    /**
     * description：根据类别编号查询类别名称
     * user 朱正磊
     * time 2019-04-22 10:35
     * @param menuCode 类别编号
     * @return 返回类别名称
     */
    String findMenuNameByMenuCode(String menuCode);

    /**
     * description：根据所属级别和状态以及是否属于圈子菜单查询类别列表（主要是针对一级类别）
     * user 朱正磊
     * time 2019-04-23 10:27
     * @param levelType 当前所属级别（1：一级类别；2：二级类别）
     * @param state 状态（1：上架；2：下架）
     * @param isCircleMenu 是否属于圈子菜单（1：否；2：是）
     * @return 返回类别列表
     */
    List<MenuLevelConfig> findByLevelTypeAndState(Integer levelType, Integer state, Integer isCircleMenu);

    /**
     * description：根据父类ID和状态查询类别列表（二级类别）
     * user 朱正磊
     * time 2019-04-23 10:38
     * @param parentId 父类ID
     * @param state 状态（1：上架；2：下架）
     * @return 返回类别列表
     */
    List<MenuLevelConfig> findByParentIdAndState(Integer parentId, Integer state);

    /**
     * description：根据类别编号查询类别对象
     * user 朱正磊
     * time 2019-04-23 10:46
     * @param menuCode 类别编号
     * @return 返回类别对象
     */
    MenuLevelConfig findByMenuCode(String menuCode);

    /**
     * description：更新一级类别下的二级类别的上下架状态（用来下架）
     * user 朱正磊
     * time 2019-04-23 17:42
     * @param parentId 一级类别ID
     * @return 返回持久化操作数据库状态值
     */
    Integer updateStateByParentId(Integer parentId);

    /**
     * description：根据类别名称查询类别列表（可以不存在，如果存在只允许存在一条数据）
     * user 朱正磊
     * time 2019-04-25 15:37
     * @param menuName 类别名称
     * @return 返回类别列表
     */
    List<MenuLevelConfig> findByMenuName(String menuName);

}
